'use strict';
const fs = require('fs');
const path = require('path');
/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller } = app;


  // ===========================user用户api=====================================

  const user = '/api/admin/user/'; // 开启路由前缀
  const is_user = app.middleware.isUser(); // 查询用户名是否已被占用中间件

  router.post(`${user}register`, is_user, controller.admin.user.create);// 注册用户接口
  router.post(`${user}login`, controller.admin.user.login);// 用户登录接口
  router.delete('user', `${user}`, controller.admin.user.destroy);// 删除 批量删除
  router.patch(`${user}`, controller.admin.user.changePassword); // 用户修改密码
  router.post('/api/admin/user/setRoles/', controller.admin.user.setRoles); // 给用户设置角色
  router.resources('user', `${user}`, controller.admin.user);


  // ===========================rorl角色api=====================================

  router.post('/api/admin/role', controller.admin.role.create);// 添加角色
  router.put('/api/admin/role/:id', controller.admin.role.update);// 修改角色
  router.delete('/api/admin/role/', controller.admin.role.destroy);// 删除角色
  router.get('/api/admin/role', controller.admin.role.index); // 获取角色列表
  router.get('/api/admin/role/:id', controller.admin.role.show); // 获取某个角色
  router.patch('/api/admin/role/setDefaultRole/:id', controller.admin.role.setDefaultRole);// 设置默认角色


  // ===========================user_role用户角色关系表api=====================================

  router.get('/api/admin/user_role', controller.admin.userRole.index);
  router.get('/api/admin/user_role/:id', controller.admin.userRole.show); // 废弃
  router.delete('/api/admin/user_role/', controller.admin.userRole.destroy);
  router.post('/api/admin/user_role', controller.admin.userRole.create);//  废弃
  router.put('/api/admin/user_role/:id', controller.admin.userRole.update);// 废弃
  router.post('/api/admin/user_role/bulk_role', controller.admin.userRole.bulkCreateRole);// 创建 单用户-多角色关系


  // ===========================permission资源=====================================

  router.get('/api/admin/permission', controller.admin.permission.index);
  router.get('/api/admin/permission/:id', controller.admin.permission.show);
  router.delete('/api/admin/permission/', controller.admin.permission.destroy);
  router.post('/api/admin/permission', controller.admin.permission.create);
  router.put('/api/admin/permission/:id', controller.admin.permission.update);

  // ===========================role_permission角色资源关系表=====================================

  router.get('/api/admin/role_permission', controller.admin.rolePermission.index);
  router.get('/api/admin/role_permission/:id', controller.admin.rolePermission.show);
  router.delete('/api/admin/role_permission/', controller.admin.rolePermission.destroy);
  router.post('/api/admin/role_permission', controller.admin.rolePermission.create);
  router.put('/api/admin/role_permission/:id', controller.admin.rolePermission.update);
  router.post('/api/admin/role_permission/bulk_permission', controller.admin.rolePermission.bulkCreatePremission);// 创建 单角色-多资源关系

  // ===========================role_menu 色-菜单关系表api=====================================
  router.get('/api/admin/role_menu', controller.admin.roleMenu.index);
  router.get('/api/admin/role_menu/:id', controller.admin.roleMenu.show);
  router.post('/api/admin/role_menu', controller.admin.roleMenu.create);
  router.delete('/api/admin/role_menu/', controller.admin.roleMenu.destroy);
  router.put('/api/admin/role_menu/:id', controller.admin.roleMenu.update);
  router.post('/api/admin/role_menu/bulk_menu', controller.admin.roleMenu.bulkCreateMenu);// 创建 单角色-多资源关系

  // ===========================menu菜单表api=====================================
  const menu = '/api/admin/menu/'; // 开启路由前缀
  router.delete(`${menu}`, controller.admin.menu.destroy);
  router.get(`${menu}user_menu`, controller.admin.menu.userMenus);// 根据角色获取菜单
  router.resources('menu', `${menu}`, controller.admin.menu);

  // ===========================ArticleComment文章评论表api=====================================
  router.get('/api/admin/articlecomment', controller.admin.newsComment.index); // 获取列表
  router.put('/api/admin/articlecomment/:id', controller.admin.newsComment.update);// 修改
  router.delete('/api/admin/articlecomment/', controller.admin.newsComment.destroy);// 删除
  router.get('/api/admin/articlecomment/:id', controller.admin.newsComment.show); // 获取某个


  // ===========================ArticleReports 举报文章表api =====================================

  
  router.get('/api/admin/article/reports', controller.admin.newsReport.index);// 获取举报文章列表
  router.get('/api/admin/article/reports/:id', controller.admin.newsReport.show);// 根据id获取举报文章详细资料
  router.put('/api/admin/article/reports/:id', controller.admin.newsReport.update);// 根据id修改举报的文章
  router.delete('/api/admin/article/reports', controller.admin.newsReport.destroy);// 删除举报的文章


  // ===========================ArticleDislikes对文章不喜欢api=====================================

  router.post('/api/admin/article/dislikes', controller.admin.articleDislikes.create);// 对文章不喜欢
  router.delete('/api/admin/article/dislikes/:article_id', controller.admin.articleDislikes.destroy);// 取消对文章不喜欢

  // ===========================Article文章api=====================================
  const article = '/api/admin/article/'; // 开启路由前缀

  router.delete(`${article}`, controller.admin.article.destroy);// 删除接口

  router.resources('article', `${article}`, controller.admin.article);

  // ===========================ArticleCategory文章分类api=====================================
  const articleCategory = '/api/admin/articlecategory/'; // 开启路由前缀

  // 添加文章类别 1，验证字段，2，是否登录，3是否管理员
  // router.post(`${articleCategory}`, controller.admin.articleCategory.create);

  // // 获取用户列表 1判断是否登录，2判断是不是管理员 已经全局中间件验证
  // router.get(`${articleCategory}`, controller.admin.articleCategory.index);

  // // 修改修改文章分类 1,判断是否已经登录 2看看需不需要判断管理员 3,判断修改字段规则
  // router.put(`${articleCategory}:id`, controller.admin.articleCategory.update);

  // // 删除文章分类 1,判断是否已经登录 2，判断管理员
  // router.delete(`${articleCategory}:id`, controller.admin.articleCategory.destroy);
  router.delete(`${articleCategory}`, controller.admin.articleCategory.destroy);// 删除接口

  router.resources('articleCategory', `${articleCategory}`, controller.admin.articleCategory);

  // ===========================link友情链接api=====================================

  const link = '/api/admin/link/'; // 开启路由前缀
  router.delete(`${link}`, controller.admin.link.destroy);// 删除接口
  router.resources('link', `${link}`, controller.admin.link);


  // ===========================upload文件上传api=====================================
  const upload = '/api/admin/upload/'; // 开启路由前缀
  // stream
  router.post(`${upload}`, controller.admin.upload.uploadmax);
  // file
  // router.post(`${upload}`, controller.admin.upload.addHead);

  // ===========================setting系统设置api=====================================
  const setting = '/api/admin/setting/'; // 开启路由前缀
  router.resources('setting', `${setting}`, controller.admin.setting);


  // 自动加载./router下所有js文件，并自动注册为路由
  // 使用递归实现遍历文件夹中所有文件 解析需要遍历的文件夹，我这以router目录为例
  const filePath = path.resolve(__dirname, './router');
  // 调用文件遍历方法
  fileDisplay(filePath);

  /**
 * 文件遍历方法
 * @param filePath 需要遍历的文件路径
 */
  function fileDisplay(filePath) {
    // 根据文件路径读取文件，返回文件列表
    fs.readdir(filePath, function(err, files) {
      if (err) {
        console.warn(err);
      } else {
        // 遍历读取到的文件列表
        files.forEach(function(filename) {
          // 获取当前文件的绝对路径
          const filedir = path.join(filePath, filename);
          // 根据文件路径获取文件信息，返回一个fs.Stats对象
          fs.stat(filedir, function(eror, stats) {
            if (eror) {
              console.warn('获取文件stats失败');
            } else {
              const isFile = stats.isFile();// 是文件
              const isDir = stats.isDirectory();// 是文件夹
              if (isFile) {
                // console.log('filedir', filedir);
                require(filedir)(app); // 便利出的文件注册路由
              }
              if (isDir) {
                fileDisplay(filedir);// 递归，如果是文件夹，就继续遍历该文件夹下面的文件
              }
            }
          });
        });
      }
    });
  }

  // 自动加载./router下所有js文件，并自动注册为路由
  // fs.readdirSync(path.resolve(__dirname, './router')).forEach(file => {
  // console.log(file);
  // require(`./router/${file}`)(app);
  // });

};
